<?php

namespace App\Http\Controllers\Site\Center;

use App\Http\Controllers\Controller;
use App\Models\Address;
use Illuminate\Http\Request;

class AddressController extends Controller
{

    //我在外面定义路由的时候指定了middleware中间件,所以在控制器中不用再指定中间件了
    public function setDefaultAddress(Address $address)
    {
        //因为只能有一个默认地址
        //所以当用户要设置默认地址的时候先把表中当前用户的所有地址的is_default设置为0
        Address::where('user_id', auth()->id())->update(['is_default' => 0]);
//        然后将当前对象的is_default设置为1
        $address->update(['is_default' => 1]);
        return redirect(route('site.center.where', 'address'))->with('success', '默认地址设置成功');
    }

    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request $request
     * @return \Illuminate\Http\Response
     * 用户不一定有默认地址,所以需要系统自动判断如果当前用户只有一个地址信息,那这条地址信息就是默认地址
     */
    public function store(Request $request)
    {
        $data = $request->all();
        $adds = Address::where('user_id', auth()->id());
        //如果当前用户没有地址信息那说明这是用户创建的第一条地址信息数据,那就系统默认将这条地址设置为该用户的默认地址
        if ($adds->count() == 0) {
            $data['is_default'] = 1;
        }
        if (isset($data['is_default'])) {
            //进入这个方法体说明用户要将新创建的地址设置为默认地址
            //先将当前用户的所有地址is_default设置为0
            $adds->update(['is_default' => 0]);
        }
        //除了上面的情况之外,如果传递过来的$request中如果没有is_default这个属性说明用户并不愿设置将要创建的地址为默认地址
        else {
            $data['is_default'] = 0;
        }
        $data['user_id'] = auth()->id();
        Address::create($data);
        return back()->with('success', '地址创建成功');
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\Address $address
     * @return \Illuminate\Http\Response
     */
    public function show(Address $address)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\Address $address
     * @return \Illuminate\Http\Response
     */
    public function edit(Address $address)
    {
//        用户中心编辑地址信息的时候发送过来的是axios异步请求
        //其实没必要,根本不用发异步
//        return ['valid'=>1,'message'=>'异步请求成功','data'=>$address->toArray()];
//        我再这里重新渲染地址模板,不过这次带上了两个参数
        $vars = Address::latest()->get();
        $_address = $address;
        return view('site.center.center_address', compact('vars', '_address'));

    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \App\Models\Address $address
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Address $address)
    {
//        dd([$address->toArray(),$request->all()]);
        $data = $request->all();
        if (isset($data['is_default'])) {
            //进入这个方法体说明用户要将新创建的地址设置为默认地址
            //先将当前用户的所有地址is_default设置为0
            Address::where('user_id', auth()->id())->update(['is_default' => 0]);
        } else {
            $data['is_default'] = 0;
        }
        $data['user_id'] = auth()->id();
        $address->update($data);
        return redirect(route('site.center.where', 'address'))->with('success', '地址修改成功');

    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\Address $address
     * @return \Illuminate\Http\Response
     */
    public function destroy(Address $address)
    {
        //删除对象调用delete方法就行了
        $address->delete();
        return back()->with('success', '地址删除成功');
    }
}
